package org.jeecg.modules.extbpm.process.service;

import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.activiti.engine.runtime.ProcessInstance;
import org.jeecg.modules.extbpm.process.entity.ExtActFlowData;
import org.jeecg.modules.extbpm.process.entity.ExtActProcess;
import org.jeecg.modules.extbpm.process.entity.ExtActProcessForm;
import org.jeecg.modules.extbpm.process.exception.BpmException;
import org.jeecg.modules.extbpm.process.pojo.RoleInfo;
import org.jeecg.modules.extbpm.process.pojo.UserInfo;

import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecgframework.designer.vo.AjaxJson;

import javax.servlet.http.HttpServletRequest;

/**
 * @Description: 流程表
 * @author： jeecg-boot
 * @date：   2019-03-15
 * @version： V1.0
 */
public interface IExtActProcessService extends IService<ExtActProcess> {
	
	/**
	 * 	流程设计器获取流程用户
	 * @return
	 */
	public List<UserInfo> getBpmUsers();

    /**
     * 	流程设计器获取分页流程用户
     * @return
     */
	Page<UserInfo> getPageBpmUsers(String account, String name, Page<UserInfo> page);

    /**
	 * 	流程设计器获取流程角色
	 * @return
	 */
	public List<RoleInfo> getBpmRoles();
	
	/**
	 * 	流程发布
	 * @param extActProcess
	 * @throws Exception
	 */
	public void deployProcess(ExtActProcess extActProcess) throws Exception;
	
	/**
	 * 	清理流程用户
	 */
	public void cleanBpmUser();
	
	/**
	 * 	获取系统用户
	 * @return
	 */
	public List<UserInfo> getSysUsers();
	
	/**
	 * 	根据系统用户id获取用户关联的角色
	 * @param userId
	 * @return
	 */
	public List<RoleInfo> getSysRolesByUserId(String userId);
	
	/**
	 * 	同步用户信息和其关联的角色到工作流
	 * @param user
	 * @param roleList
	 */
	public void saveActIdMembership(UserInfo user,List<RoleInfo> roleList);
	
	/**
	 * 	同步用户信息从工作流删除
	 * @param userName
	 */
	public void deleteActIdMembership(String userName);
	
	/**
	 * 	根据表名和id查询表数据
	 * @param tableName
	 * @param id
	 * @return
	 */
	public Map<String,Object> getDataById(String tableName,String id);

	/**
	 * online表单/自定义开发表单 流程启动
	 * @param userid
	 * @param dataId
	 * @param dataForm
	 * @param extActProcessForm
	 * @throws BpmException
	 */
	public ProcessInstance startMutilProcess(String userid, String dataId, Map<String, Object> dataForm, ExtActProcessForm extActProcessForm) throws BpmException;

	/**
	 * online表单/自定义开发表单 流程启动
	 * @param username 流程发起人账号
	 * @param flowCode 流程编码
	 * @param id  数据ID
	 * @param formUrl  流程表单URL
	 * @param formUrlMobile 流程表单移动URL
	 * @throws BpmException
	 */
	public ProcessInstance startMutilProcessApi(String username,String flowCode, String id, String formUrl,String formUrlMobile) throws BpmException;

	/**
	 * 保存流程表单草稿箱（online，自定义开发）
	 * @param userid
	 * @param dataId
	 * @param extActProcessForm
	 * @return
	 * @throws BpmException
	 */
	public ExtActFlowData saveMutilProcessDraft(String userid, String dataId,ExtActProcessForm extActProcessForm) throws BpmException;

	/**
	 * 自定义表单流程启动
	 * @param userid 流程发起人ID
	 * @param dataId 业务数据ID
	 * @param dataForm 业务数据
	 * @param extActProcessForm
	 * @throws BpmException
	 */
	public void startDesFormMutilProcess(String userid,String dataId,Map<String, Object> dataForm,ExtActProcessForm extActProcessForm) throws BpmException;

	/**
	 * 通过流程名字查询流程定义KEY
	 * @param processName
	 * @return
	 */
	public List<String> getProcessKeysByProcessName(String processName);

	/**
	 * 保存流程
	 * @param request
	 * @throws Exception
	 */
	public AjaxJson saveProcess(HttpServletRequest request) throws Exception;
}
